package db;

import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;

public class Nimi extends Item {

	private int id;
	private String nimi;
	private Drinkki drinkki;
	private int yleisyys;

	public Nimi() {}

	public Drinkki getDrinkki() {
		return drinkki;
	}

	public void setDrinkki(Drinkki drinkki) {
		this.drinkki = drinkki;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getNimi() {
		return nimi;
	}

	public void setNimi(String nimi) {
		this.nimi = nimi;
	}

	public int getYleisyys() {
		return yleisyys;
	}

	public void setYleisyys(int yleisyys) {
		this.yleisyys = yleisyys;
	}

	/** Checks if this class is an alias for cocktail given as param */
	public boolean isAliasOf(Drinkki drinkki) {
		Query q = DatabaseAccess.getInstance().createQuery(
			"FROM db.Nimi as nimi WHERE "
			+ "nimi.drinkki = :drinkki"
		);

		q.setParameter("drinkki", drinkki);
		return (q.list().size() == 0) ? false : true;
	}

	public static Nimi searchExactMatch(String nimi) {
		Query q = DatabaseAccess.getInstance().createQuery(
			"FROM db.Nimi as nimi WHERE "
			+ "nimi.nimi LIKE :nimi"
		);

		q.setParameter("nimi", nimi);
		return (Nimi) q.uniqueResult();
	}

	public static List<Nimi> search(String nimi) {
		Query q = DatabaseAccess.getInstance().createQuery(
			"FROM db.Nimi as nimi WHERE "
			+ "nimi.nimi LIKE :nimi"
		);

		q.setParameter("nimi", "%" + nimi + "%");
		return q.list();
	}

	public static List<Nimi> search(String[] nimet) {
		if (nimet == null || nimet.length == 0) {
			return null;
		}

		List<Nimi> nimmet = new ArrayList<Nimi>();

		for (String nimi : nimet) {
			if (nimi != null && !nimi.isEmpty()) {
				nimmet.addAll(search(nimi));
			}
		}

		return nimmet;
	}
}
